# routines to add nodes
addnode()
{
    lockfile $1.lock
    echo "$2" >> $1
    rm -f $1.lock
}

check_stop_condition()
{
    stopping=$1
    logging=$2
    if [[ -e ${stopping} ]]; then
        echo -e "[$(date)] File \"${stopping}\" detected. Exiting... (tasks will not be interrupted)" >> ${logging}
        exit
    fi
}

# Directories
dirreno="/home/nucave/workdir/lattice/RENORMALIZATION/reno"

dir="$dirreno/NF2/Z4F/"
dirinput="$dirreno/NF2/Z4F/INPUT"

dirdata="/home/nucave/workdir/lattice/RENORMALIZATION/"

# Fermionic Action
Nf=2
action="TwistedMass"



########################################################
#### READ TASK
######################################################



log="log.Calc_D.$(date +%d%b%Y-%Hh%Mm)"
script="launch_D_onemomenta.sh"
executable="Calc_D_oneP"
twisted_basis=1
#executable="Calc_D_PV_oneP"
#twisted_basis=0
list="todo_list.Calc_D"
nodes="nodes.Calc_D"
stopping=".parate"


while [[ -s ${list} ]] 
do    ##### BEGIN DO OVER ELEMENT IN LIST
        	check_stop_condition ${stopping} ${log}
                if [[ -s ${nodes} ]]; then

                                # choosing an empty slot
                                lockfile ${nodes}.lock
                                slot=$(cat ${nodes}|sed -e '1!D')
                                sed -e '1D' ${nodes} > ${nodes}.temp
                                mv ${nodes}.temp ${nodes}
                                rm -f ${nodes}.lock

                                # reading the task
                                lockfile ${list}.lock
                                task=$(cat ${list} | sed -e '1!D')
                                sed -e '1D' ${list} > ${list}.temp
                                mv ${list}.temp ${list}
                                rm -f ${list}.lock

                                if [[ -n ${task} ]]; then
					beta100=$(echo ${task} | awk  '{print $1}') 
					musea=$(echo ${task} | awk  '{print $2}')		
		                        imom=$(echo ${task} | awk  '{print $3}')
					Nmass=$(echo ${task} | awk  '{print $4}')
					Nrc=$(echo ${task} | awk  '{print $5}')
                                    #    imass=$(echo ${task} | awk  '{print $5}')
                                    #    irc=$(echo ${task} | awk  '{print $6}')
                                        jmom=`printf %03d $imom`
                                else
                                    addnode ${nodes} ${slot}
                                    slot=""
                                    sleep 5s
                                fi

                else
                                slot=""
                                sleep 5s
                fi
	
###############################
## END READ TASK
##################################

#####################################
## INPUT VARIBALES
#########################################

	beta=$(echo "scale=2; $beta100/100" | bc -l)

	#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
	#@@@@ gamma base & momentum order
	#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

	gamma="TWISTED"
	momentum_order="TYXZ"
	convention="TW"

	#@@@@@@@@@@@@@@@@@@@@@@@@@
	# L^3xT=V
	#@@@@@@@@@@@@@@@@@@@@@@@@@

        if [ ${musea} = "0.0020" ] || [ ${musea} = "0.0050" ]
        then
         L=24
         T=48
        fi
        if [ ${musea} = "0.0065" ]
        then
         L=32
         T=64
        fi

                #@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#
                #@@  Configurations to be read:
                #@@  conf=conf_ini+i*jump with 
                #@@      i=0,1,...Nconf-1
                #@@      Nconf=Nex*Nclust
                #@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#

                Nskip=0
                if [ $musea = "0.0020" ] ; then conf_ini=900; jump=10; Nex=13; fi
                if [ $musea = "0.0050" ] ; then conf_ini=30; jump=5; Nex=11; fi
                if [ $musea = "0.0065" ] ; then conf_ini=500; jump=10; Nex=16; fi
		Nclust=16
	

	#@@@@@@@@@@@@@@@@@@
	# Momenta
	#@@@@@@@@@@@@@@@@@@@@@

	Nmom=492
	Nmom_eq=135


	echo "1 0 0 0" > $dirinput/mom_${beta100}.dat # boundary conditions
	echo "2" >> $dirinput/mom_${beta100}.dat # Nindexmom
	if [ $Nmom -eq 140 ]
	then
	echo "0 3 0 2 0 2 0 2" >> $dirinput/mom_${beta100}.dat
	echo "4 7 2 3 2 3 2 3" >> $dirinput/mom_${beta100}.dat
	fi
	if [ $Nmom -eq 492 ]
	then
	echo "0 3 0 2 0 2 0 2" >> $dirinput/mom_${beta100}.dat
	echo "4 9 2 5 2 5 2 5" >> $dirinput/mom_${beta100}.dat
	fi



	#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
        # IO dirs
	#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
             dir_input="$dirdata/DATA/INPUT/${action}Nf${Nf}/b$beta100/${musea}/"
             dir_output="$dirdata/DATA/OUTPUT/${action}Nf${Nf}/b$beta100/Z4F/${musea}/"

	mkdir -p -v $dir_output/p$jmom
	mkdir -p -v $dir_output/0001/p$jmom 
	mkdir -p -v $dir_output/1110/p$jmom 



	#@@@@@@@@@@@@@@@@
	#@@ input arg
	#@@@@@@@@@@@@@@@

	# Esto es comun a todo un ensemble
        args="-gamma=${gamma} -momentum_order=${momentum_order} -L=$L -T=$T -dir_input=$dir_input -dir_output=$dir_output -kappa_sea=$kappa_sea -conf_ini=${conf_ini} -jump=${jump} -Nclust=${Nclust} -Nex=${Nex}  -beta100=${beta100} "
	# save args to be read
        echo $args > $dir/EXECUTABLES/args_${musea}


#################################
# launch the task
#################################

         if [[ -n ${slot} ]]; then

               inode=$(echo ${slot} | awk -F"cpu" '{print $1}')
               icpu=$(echo ${slot} | awk -F"${inode}" '{print $2}')

		echo "ssh ${inode} \"sh ${dir}/SCRIPTS/Calc_D/${script} ${musea} $imom $Nmass $Nrc $twisted_basis $executable $log $slot $nodes  &> $dir/LOGS/${executable}_${beta100}_${musea}_${jmom}_${slot}.log "
               ssh ${inode} "sh ${dir}/SCRIPTS/Calc_D/${script} ${musea} $imom $Nmass $Nrc $twisted_basis $executable $log $slot $nodes  &> $dir/LOGS/${executable}_${beta100}_${musea}_${jmom}_${slot}.log  2>&1 & "

                lockfile ${log}.lock
                echo -e " ${slot}  beta=${beta} -- musea=${musea} --- p:${jmom} --- In_progress" >> ${log}
                rm -f ${log}.lock
                sleep 5s
               fi
 
done # END DO OVER ELEMENT IN LIST	
